package scrolls;

import java.awt.Font;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;

import javax.annotation.Resource;
import javax.imageio.ImageIO;

import org.imgscalr.Scalr;

public class Resources
{
	static BufferedImage[] textures = new BufferedImage[8];
	static BufferedImage[] mapTextures = new BufferedImage[9];
	static BufferedImage texture;
	static BufferedImage[] waterAnimated = new BufferedImage[64];
	static BufferedImage water;
	static BufferedImage icon;
	public static Font f, fs;
	static int imageCounter = 0;

	public Resources()
	{
		textures();
		createArray(texture, textures, 32, 1, 8);
		createArray(water, waterAnimated, 32, 64, 1);
		getFont();
		buildMapTextures(textures, mapTextures);
	}

	public static void counter()
	{
		imageCounter += 2;
		if (imageCounter >= 500)
			imageCounter = 0;
//		System.out.println(imageCounter / 8);
	}

	private void buildMapTextures(BufferedImage[] textures, BufferedImage[] mapTextures)
	{

		for (int i = 0; i <= 7; i++)
		{
			mapTextures[i] = resize(textures[i], 3, 3);
		}
		mapTextures[8] = resize(waterAnimated[2], 3, 3);
	}

	private BufferedImage resize(BufferedImage image, int newW, int newH)
	{
		BufferedImage thumbnail = Scalr.resize(image, Scalr.Method.ULTRA_QUALITY, Scalr.Mode.FIT_EXACT, newW, newH, Scalr.OP_ANTIALIAS);
		return thumbnail;
	}

	public static BufferedImage waterAnimation()
	{
		return waterAnimated[imageCounter / 8];
	}

	private void textures()
	{
		try
		{
			texture = ImageIO.read(Resource.class.getResource("/resources/textures.png"));
		} catch (IOException e)
		{
		}

		try
		{
			water = ImageIO.read(Resource.class.getResource("/resources/water.png"));
		} catch (IOException e)
		{
		}

		try
		{
			icon = ImageIO.read(Resource.class.getResource("/resources/icon.png"));
		} catch (IOException e)
		{
		}

	}

	static BufferedImage player()
	{
		BufferedImage player = null;
		try
		{
			player = ImageIO.read(Resource.class.getResource("/resources/player.png"));
		} catch (IOException e)
		{
		}
		return player;
	}

	static void createArray(BufferedImage image, BufferedImage[] images, int size, int rows, int cols)
	{
		BufferedImage temp = image;

		for (int i = 0; i < rows; i++)
		{
			for (int j = 0; j < cols; j++)
			{
				images[(i * cols) + j] = temp.getSubimage(j * size, i * size, size, size);
			}
		}
	}

	void readLevel(String filename, int[][] level, int part)
	{
		try
		{
			URL urlToText = this.getClass().getResource("/resources/levels/" + part + "/" + filename + ".txt");
			InputStream is = urlToText.openStream();
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader in = new BufferedReader(isr);
			StringBuilder sb = new StringBuilder();
			byte b = 0;
			while ((b = (byte) in.read()) != -1)
			{
				sb.append("" + ((char) b));
			}
			String str = sb.toString();
			String[] lines = str.split("(\n|\r)+");
			for (int i = 0; i < lines.length; i++)
			{
				for (int j = 0; j < lines[i].length(); j++)
				{
					level[i][j] = Integer.parseInt("" + lines[i].charAt(j));
				}
			}
			in.close();
		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}

	private void getFont()
	{
		try
		{
			f = Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream("/resources/Jet Set.ttf"));
			fs = Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream("/resources/Jet Set.ttf"));
		} catch (Exception e)
		{
			System.out.println(e);
		}
		f = f.deriveFont(22f);
		fs = fs.deriveFont(13f);
	}

}
